package com.xaaef.jvm;

/**
 * <p>
 * num1 等于 2 。
 * 因为 常量初始化 和 静态代码块 在编译的时候会合并到一个名称为 <<clinit>> 的方法中
 * 按照从上到下的执行过程
 * <p>
 * num2 当于 10
 * </p>
 * <p>
 * 备注： 使用 jclasslib bytecode viewer 打开 class 文件，找到 <<clinit>> 方法
 * <p>
 * 0 iconst_1
 * 1 putstatic #7 <com/xaaef/jvm/ClassInitTest.num1 : I>
 * 4 iconst_2
 * 5 putstatic #7 <com/xaaef/jvm/ClassInitTest.num1 : I>
 * 8 bipush 20
 * 10 putstatic #12 <com/xaaef/jvm/ClassInitTest.num2 : I>
 * 13 bipush 10
 * 15 putstatic #12 <com/xaaef/jvm/ClassInitTest.num2 : I>
 * 18 return
 *
 * @author Wang Chen Chen<932560435@qq.com>
 * @date 2022/2/15 20:46
 */

public class ClassInitTest {

    private static int num1 = 1;

    static {
        num1 = 2;
        num2 = 20;
    }

    private static int num2 = 10;

    public static void main(String[] args) {
        System.out.println("num1: " + num1);
        System.out.println("num2: " + num2);
    }

}
